Micron Document
NexusPi Git Node


Displaying Raw • Download

Pages.h HEAD (592c826d) Text, 15.85 KB

T8b949e// Copyright (C) 2026, Chad Attermann

T8b949e// This program is free software: you can redistribute it and/or modify
T8b949e// it under the terms of the GNU General Public License as published by
T8b949e// the Free Software Foundation, either version 3 of the License, or
T8b949e// (at your option) any later version.

T8b949e// This program is distributed in the hope that it will be useful,
T8b949e// but WITHOUT ANY WARRANTY; without even the implied warranty of
T8b949e// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
T8b949e// GNU General Public License for more details.

T8b949e// You should have received a copy of the GNU General Public License
T8b949e// along with this program. If not, see <https://www.gnu.org/licenses/>.

Tff7b72#Tff7b72pragma once

Tff7b72#Tff7b72include T8b949e<Arduino.h>

Tff7b72#Tff7b72include T8b949e"Config.h"

Tff7b72#Tff7b72include T8b949e<microReticulum/Interface.h>
Tff7b72#Tff7b72include T8b949e<microReticulum/Identity.h>
Tff7b72#Tff7b72include T8b949e<microReticulum/Utilities/OS.h>
Tff7b72#Tff7b72include T8b949e<microReticulum/Bytes.h>
Tff7b72#Tff7b72ifdef HAS_BME
Tff7b72#Tff7b72include T8b949e"BME680.h"
Tff7b72#Tff7b72endif
T8b949e// CBA NOTE Thge following <MsgPack.h> include *MUST* precede the "Utilities.h" include
Tff7b72#Tff7b72include T8b949e<MsgPack.h>

Tff7b72#Tff7b72include T8b949e<string>

Tff7b72extern Te6edf3RNSTff7b72:Tff7b72:Te6edf3Interface Te6edf3lora_interfaceTb4b4b4;
Tff7b72#Tff7b72if HAS_WIFI && defined(UDP_TRANSPORT)
Tff7b72extern Te6edf3RNSTff7b72:Tff7b72:Te6edf3Interface Te6edf3udp_interfaceTb4b4b4;
Tff7b72extern Te6edf3IPAddress Te6edf3wr_device_ipTb4b4b4;
Tff7b72extern Tffa657uint16_t Te6edf3udp_portTb4b4b4;
Tff7b72extern Tffa657uint8_t Te6edf3wifi_modeTb4b4b4;
Tff7b72extern Tffa657char Te6edf3wr_ssidTb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72extern Te6edf3RNSTff7b72:Tff7b72:Te6edf3Destination Te6edf3nomadnet_destinationTb4b4b4;

Tffa657void Td2a8ffadd_interface_detailsTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3contentTb4b4b4, Tff7b72const Te6edf3RNSTff7b72:Tff7b72:Te6edf3InterfaceTff7b72& Te6edf3interfaceTb4b4b4) Tb4b4b4{
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffmodeTffea00\"Ta5d6ff: Tffea00\"Ta5d6ff"Tb4b4b4;
Tff7b72switch Tb4b4b4(Te6edf3interfaceTb4b4b4.Te6edf3modeTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72RNSTff7b72:Tff7b72:Tff7b72TypeTff7b72:Tff7b72:Tff7b72InterfaceTff7b72:Tff7b72:Tff7b72MODE_ACCESS_POINTTb4b4b4:
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffACCESS_POINTTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RNSTff7b72:Tff7b72:Tff7b72TypeTff7b72:Tff7b72:Tff7b72InterfaceTff7b72:Tff7b72:Tff7b72MODE_BOUNDARYTb4b4b4:
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffBOUNDARYTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RNSTff7b72:Tff7b72:Tff7b72TypeTff7b72:Tff7b72:Tff7b72InterfaceTff7b72:Tff7b72:Tff7b72MODE_FULLTb4b4b4:
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffFULLTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RNSTff7b72:Tff7b72:Tff7b72TypeTff7b72:Tff7b72:Tff7b72InterfaceTff7b72:Tff7b72:Tff7b72MODE_GATEWAYTb4b4b4:
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffGATEWAYTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RNSTff7b72:Tff7b72:Tff7b72TypeTff7b72:Tff7b72:Tff7b72InterfaceTff7b72:Tff7b72:Tff7b72MODE_POINT_TO_POINTTb4b4b4:
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffPOINT_TO_POINTTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RNSTff7b72:Tff7b72:Tff7b72TypeTff7b72:Tff7b72:Tff7b72InterfaceTff7b72:Tff7b72:Tff7b72MODE_ROAMINGTb4b4b4:
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffROAMINGTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RNSTff7b72:Tff7b72:Tff7b72TypeTff7b72:Tff7b72:Tff7b72InterfaceTff7b72:Tff7b72:Tff7b72MODE_NONETb4b4b4:
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffNONETa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
Tff7b72breakTb4b4b4;
Tb4b4b4}
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Tffea00\"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffbitrateTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3interfaceTb4b4b4.Te6edf3bitrateTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpackets_sentTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3interfaceTb4b4b4.Te6edf3txTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpackets_receivedTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3interfaceTb4b4b4.Te6edf3rxTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffbytes_sentTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3interfaceTb4b4b4.Te6edf3txbytesTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffbytes_receivedTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3interfaceTb4b4b4.Te6edf3rxbytesTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffqueued_announcesTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3interfaceTb4b4b4.Te6edf3announce_queueTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}

T8b949e// Request handler for NomadNet pages. Signature is fixed by
T8b949e// RNS::RequestHandler::response_generator (see src/Destination.h).
T8b949e//
T8b949e// The Link::request contract is that the return value must already be
T8b949e// msgpack-encoded bytes — Link::handle_request splices it verbatim into
T8b949e// the response envelope (Link.cpp:994). Python RNS auto-encodes
T8b949e// arbitrary return values; in C++ we encode manually here.
Te6edf3RNSTff7b72:Tff7b72:Te6edf3Bytes Td2a8ffserve_pageTb4b4b4(
Tff7b72const Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3pathTb4b4b4,
Tff7b72const Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4,
Tff7b72const Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3request_idTb4b4b4,
Tff7b72const Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3link_idTb4b4b4,
Tff7b72const Te6edf3RNSTff7b72:Tff7b72:Te6edf3IdentityTff7b72& Te6edf3remote_identityTb4b4b4,
Tffa657double Te6edf3requested_at
Tb4b4b4) Tb4b4b4{

Te6edf3stdTff7b72:Tff7b72:Te6edf3string Te6edf3categoryTb4b4b4;
Tb4b4b4{
Te6edf3MsgPackTff7b72:Tff7b72:Te6edf3Unpacker Te6edf3uTb4b4b4;
Te6edf3uTb4b4b4.Te6edf3feedTb4b4b4(Te6edf3dataTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3dataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3stdTff7b72:Tff7b72:Te6edf3mapTff7b72<Te6edf3StringTb4b4b4, Te6edf3StringTff7b72> Te6edf3paramsTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3uTb4b4b4.Te6edf3isMapTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3deserializeTb4b4b4(Te6edf3paramsTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Tff7b72autoTff7b72& Tb4b4b4[Te6edf3keyTb4b4b4, Te6edf3valueTb4b4b4] Tff7b72: Te6edf3paramsTb4b4b4) Tb4b4b4{
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffParam: key=%s, value=%sTa5d6ff"Tb4b4b4, Te6edf3keyTb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3valueTb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72auto Te6edf3iter Tff7b72= Te6edf3paramsTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"Ta5d6ffvar_cTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3iter Tff7b72!Tff7b72= Te6edf3paramsTb4b4b4.Te6edf3endTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3category Tff7b72= Tb4b4b4(Tff7b72*Te6edf3iterTb4b4b4)Tb4b4b4.Te6edf3secondTb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3VERBOSEFTb4b4b4(Ta5d6ff"Ta5d6ffServing page %s with category Tffea00\"Ta5d6ff%sTffea00\"Ta5d6ff to link <%s> with identity <%s>Ta5d6ff"Tb4b4b4, Te6edf3pathTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3categoryTb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3link_idTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Tb4b4b4(Te6edf3remote_identity Tff7b72? Te6edf3remote_identityTb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4) Tff7b72: Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTb4b4b4{Tb4b4b4}Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3MsgPackTff7b72:Tff7b72:Te6edf3Packer Te6edf3packerTb4b4b4;
Tb4b4b4{
Te6edf3RNSTff7b72:Tff7b72:Te6edf3Bytes Te6edf3contentTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3path Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ff/page/index.muTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ff> microReticulum StatsTffea00\nTffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff>> MemoryTffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff`!`[• Heap Memory`:/page/stack.mu`c=heap]`Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff`!`[• Memory Pools`:/page/stack.mu`c=pool]`Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff`!`[• Memory Allocators`:/page/stack.mu`c=alloc]`Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff>> StorageTffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff`!`[• Flash Memory`:/page/stack.mu`c=flash]`Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff`!`[• Object Stores`:/page/stack.mu`c=store]`Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff`!`[• Transport Metrics`:/page/stack.mu`c=metrics]`Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff>> DeviceTffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff`!`[• General`:/page/device.mu`c=general]`Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff`!`[• Interface`:/page/device.mu`c=interfaces]`Tffea00\nTa5d6ff"Tb4b4b4;
Tff7b72#Tff7b72ifdef HAS_BME
Tff7b72if Tb4b4b4(Te6edf3BME680Tff7b72:Tff7b72:Te6edf3bme_installedTb4b4b4) Tb4b4b4{
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff`!`[• Telemetry`:/page/telemetry.mu]`Tffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Te6edf3remote_identityTb4b4b4) Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Tffea00\nTa5d6ff🛡️ Verified identity: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3remote_identityTb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Tff7b72else Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Tffea00\nTa5d6ff⚠️ Unknown identity. Identity must be provided for access to this site.Tffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3path Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ff/page/stack.muTa5d6ff"Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3category Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffheapTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ff{Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffheap_sizeTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3UtilitiesTff7b72:Tff7b72:Te6edf3MemoryTff7b72:Tff7b72:Te6edf3heap_sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffheap_freeTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3UtilitiesTff7b72:Tff7b72:Te6edf3MemoryTff7b72:Tff7b72:Te6edf3heap_availableTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffheap_freepctTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657unsignedTb4b4b4)Tb4b4b4(Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3RNSTff7b72:Tff7b72:Te6edf3UtilitiesTff7b72:Tff7b72:Te6edf3MemoryTff7b72:Tff7b72:Te6edf3heap_availableTb4b4b4(Tb4b4b4) Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3RNSTff7b72:Tff7b72:Te6edf3UtilitiesTff7b72:Tff7b72:Te6edf3MemoryTff7b72:Tff7b72:Te6edf3heap_sizeTb4b4b4(Tb4b4b4) Tff7b72* T79c0ff100.0Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Tff7b72#Tff7b72if defined(ESP32)
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffheap_minfreeTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3ESPTb4b4b4.Te6edf3getMinFreeHeapTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffheap_maxallocTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3ESPTb4b4b4.Te6edf3getMaxAllocHeapTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffheap_fragmentedTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657unsignedTb4b4b4)Tb4b4b4(T79c0ff100.0 Tff7b72- Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getMaxAllocHeapTb4b4b4(Tb4b4b4) Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getFreeHeapTb4b4b4(Tb4b4b4) Tff7b72* T79c0ff100.0Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpsram_sizeTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3ESPTb4b4b4.Te6edf3getPsramSizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpsram_freeTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3ESPTb4b4b4.Te6edf3getFreePsramTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpsram_freepctTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Te6edf3ESPTb4b4b4.Te6edf3getPsramSizeTb4b4b4(Tb4b4b4) Tff7b72> T79c0ff0Tb4b4b4) Tff7b72? Tb4b4b4(Tffa657unsignedTb4b4b4)Tb4b4b4(Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getFreePsramTb4b4b4(Tb4b4b4) Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getPsramSizeTb4b4b4(Tb4b4b4) Tff7b72* T79c0ff100.0Tb4b4b4) Tff7b72: T79c0ff0Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpsram_minfreeTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3ESPTb4b4b4.Te6edf3getMinFreePsramTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpsram_maxallocTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3ESPTb4b4b4.Te6edf3getMaxAllocPsramTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpsram_fragmentedTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Te6edf3ESPTb4b4b4.Te6edf3getFreePsramTb4b4b4(Tb4b4b4) Tff7b72> T79c0ff0Tb4b4b4) Tff7b72? Tb4b4b4(Tffa657unsignedTb4b4b4)Tb4b4b4(T79c0ff100.0 Tff7b72- Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getMaxAllocPsramTb4b4b4(Tb4b4b4) Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getFreePsramTb4b4b4(Tb4b4b4) Tff7b72* T79c0ff100.0Tb4b4b4) Tff7b72: T79c0ff0Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Tff7b72#Tff7b72elif defined(ARDUINO_ARCH_NRF52) || defined(ARDUINO_NRF52_ADAFRUIT)
T8b949e//HEAD("Heap Stats", LOG_TRACE);
T8b949e//if (loglevel() == LOG_TRACE) {
T8b949e// dbgMemInfo();
T8b949e//}
Tff7b72#Tff7b72endif
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff}Ta5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3category Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffflashTa5d6ff"Tb4b4b4) Tb4b4b4{
Tffa657size_t Te6edf3flash_size Tff7b72= Te6edf3RNSTff7b72:Tff7b72:Te6edf3UtilitiesTff7b72:Tff7b72:Te6edf3OSTff7b72:Tff7b72:Te6edf3storage_sizeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657size_t Te6edf3flash_free Tff7b72= Te6edf3RNSTff7b72:Tff7b72:Te6edf3UtilitiesTff7b72:Tff7b72:Te6edf3OSTff7b72:Tff7b72:Te6edf3storage_availableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Te6edf3flash_freepct Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3flash_size Tff7b72> T79c0ff0Tb4b4b4) Te6edf3flash_freepct Tff7b72= Tb4b4b4(Tffa657uint8_tTb4b4b4)Tb4b4b4(Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3flash_free Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3flash_size Tff7b72* T79c0ff100.0Tb4b4b4)Tb4b4b4;
T8b949e//size_t fs_size = RNS::Utilities::OS::get_filesystem().storageSize();
T8b949e//size_t fs_free = RNS::Utilities::OS::get_filesystem().storageAvailable();
T8b949e//uint8_t fs_freepct = 0;
T8b949e//if (fs_size > 0) fs_freepct = (uint8_t)((double)fs_free / (double)fs_size * 100.0);

Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ff{Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffflash_sizeTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3flash_sizeTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffflash_freeTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3flash_freeTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffflash_freepctTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3flash_freepctTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
T8b949e//content << " \"fs_size\": " << std::to_string(fs_size) << ",\n";
T8b949e//content << " \"fs_free\": " << std::to_string(fs_free) << ",\n";
T8b949e//content << " \"fs_freepct\": " << std::to_string(fs_freepct) << ",\n";
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff}Ta5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3category Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffpoolTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ffNOT YET IMPLEMENTEDTffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3category Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffallocTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ffNOT YET IMPLEMENTEDTffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3category Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4) Tb4b4b4{
Tffa657uint32_t Te6edf3destination_path_responses Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72autoTff7b72& Tb4b4b4[Te6edf3destination_hashTb4b4b4, Te6edf3destinationTb4b4b4] Tff7b72: Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3destinationsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3destination_path_responses Tff7b72+Tff7b72= Te6edf3destinationTb4b4b4.Te6edf3path_responsesTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657uint32_t Te6edf3interface_announces Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72autoTff7b72& Te6edf3interface Tff7b72: Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3get_interfacesTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3interface_announces Tff7b72+Tff7b72= Te6edf3interfaceTb4b4b4.Te6edf3announce_queueTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ff{Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpathsTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3new_path_tableTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffdestinationsTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3destinationsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffannouncesTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3announce_tableTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffheld_announcesTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3held_announcesTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;

Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpath_requestsTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3path_requestsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffdiscovery_path_requestsTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3discovery_path_requestsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpending_local_path_requestsTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3pending_local_path_requestsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffdiscovery_pr_tagsTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3discovery_pr_tagsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffcontrol_destinationsTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3control_destinationsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffcontrol_hashesTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3control_hashesTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;

Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpacket_hashesTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3packet_hashlistTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffreverse_hashesTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3reverse_tableTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffreceiptsTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3receiptsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;

Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6fflinksTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3link_tableTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpending_linksTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3pending_linksTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffactive_linksTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3active_linksTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6fftunnelsTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3tunnelsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;

Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffknown_destinationsTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3known_destinationsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffdestination_path_responsesTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3destination_path_responsesTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffqueued_announcesTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3interface_announcesTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;

Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff}Ta5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3category Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffmetricsTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ff{Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpackets_sentTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3packets_sentTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpackets_receivedTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3packets_receivedTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpaths_addedTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3paths_addedTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpaths_updatedTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3paths_updatedTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffpaths_failedTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3paths_failedTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff}Ta5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ffCATEGORY NOT FOUNDTffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3path Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ff/page/device.muTa5d6ff"Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3category Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffgeneralTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ff{Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6fffirmware_versionTffea00\"Ta5d6ff: Tffea00\"Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3MAJ_VERSTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff.Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3MIN_VERSTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Tffea00\"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffbattery_voltageTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657floatTb4b4b4)Tb4b4b4(Tb4b4b4(Tffa657uint16_tTb4b4b4)Tb4b4b4(Te6edf3battery_voltageTff7b72*T79c0ff100Tb4b4b4)Tb4b4b4) Tff7b72/ T79c0ff100.0Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffbattery_percentTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tb4b4b4(Tffa657uint8_tTb4b4b4)Te6edf3battery_percentTb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffbattery_stateTffea00\"Ta5d6ff: Tffea00\"Ta5d6ff"Tb4b4b4;
Tff7b72switch Tb4b4b4(Te6edf3battery_stateTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72BATTERY_STATE_CHARGINGTb4b4b4:
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffCHARGINGTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72BATTERY_STATE_CHARGEDTb4b4b4:
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffCHARGEDTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72BATTERY_STATE_DISCHARGINGTb4b4b4:
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffDISCHARGINGTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72BATTERY_STATE_UNKNOWNTb4b4b4:
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffUNKNOWNTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
Tff7b72breakTb4b4b4;
Tb4b4b4}
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Tffea00\"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6fftransport_identityTffea00\"Ta5d6ff: Tffea00\"Ta5d6ff" Tff7b72<Tff7b72< Tb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3identityTb4b4b4(Tb4b4b4) Tff7b72? Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3identityTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72: Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTb4b4b4{Tb4b4b4}Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Tffea00\"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffprobe_destinationTffea00\"Ta5d6ff: Tffea00\"Ta5d6ff" Tff7b72<Tff7b72< Tb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3probe_destinationTb4b4b4(Tb4b4b4) Tff7b72? Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3probe_destinationTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72: Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTb4b4b4{Tb4b4b4}Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Tffea00\"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffmgmt_destinationTffea00\"Ta5d6ff: Tffea00\"Ta5d6ff" Tff7b72<Tff7b72< Tb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3remote_management_destinationTb4b4b4(Tb4b4b4) Tff7b72? Te6edf3RNSTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3remote_management_destinationTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72: Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTb4b4b4{Tb4b4b4}Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Tffea00\"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffnomadnet_destinationTffea00\"Ta5d6ff: Tffea00\"Ta5d6ff" Tff7b72<Tff7b72< Tb4b4b4(Te6edf3nomadnet_destination Tff7b72? Te6edf3nomadnet_destinationTb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72: Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTb4b4b4{Tb4b4b4}Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Tffea00\"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff}Ta5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3category Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffinterfacesTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ff{Tffea00\nTa5d6ff"Tb4b4b4;
Tff7b72#Tff7b72if defined(LORA_TRANSPORT)
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ff" Tff7b72<Tff7b72< Te6edf3lora_interfaceTb4b4b4.Te6edf3nameTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Tffea00\"Ta5d6ff: {Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6fffrequencyTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3lora_freqTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffbandwidthTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3lora_bwTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6fftx_powerTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3lora_txpTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffspreading_factorTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3lora_sfTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffcoding_rateTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3lora_crTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffcurrent_rssiTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3current_rssiTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffnoise_floorTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657int16_tTb4b4b4)Te6edf3noise_floorTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6fflast_rssiTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657int16_tTb4b4b4)Te6edf3last_rssiTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6fflast_snrTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657int8_tTb4b4b4)Tb4b4b4(Tb4b4b4(Tffa657int8_tTb4b4b4)Te6edf3last_snr_rawTb4b4b4) Tff7b72/ T79c0ff4.0fTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3add_interface_detailsTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3lora_interfaceTb4b4b4)Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff },Tffea00\nTa5d6ff"Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if defined(UDP_TRANSPORT)
Tff7b72if Tb4b4b4(Te6edf3wifi_mode Tff7b72!Tff7b72= Te6edf3WR_WIFI_OFF Tff7b72&Tff7b72& Te6edf3udp_interfaceTb4b4b4) Tb4b4b4{
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ff" Tff7b72<Tff7b72< Te6edf3udp_interfaceTb4b4b4.Te6edf3nameTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Tffea00\"Ta5d6ff: {Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffip_addrTffea00\"Ta5d6ff: Tffea00\"Ta5d6ff" Tff7b72<Tff7b72< Te6edf3wr_device_ipTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Tffea00\"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffudp_portTffea00\"Ta5d6ff: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3udp_portTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ffwifi_ssidTffea00\"Ta5d6ff: Tffea00\"Ta5d6ff" Tff7b72<Tff7b72< Te6edf3wr_ssid Tff7b72<Tff7b72< Ta5d6ff"Tffea00\"Ta5d6ff,Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3add_interface_detailsTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3udp_interfaceTb4b4b4)Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff },Tffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff}Ta5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ffCATEGORY NOT FOUNDTffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72ifdef HAS_BME
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3path Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ff/page/telemetry.muTa5d6ff"Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3BME680Tff7b72:Tff7b72:Te6edf3bmeTb4b4b4.Te6edf3performReadingTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ff> TelemetryTffea00\nTffea00\nTa5d6ff`!`❌ Failed to perform BME680 reading.`Tffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ff> Environmental TelemetryTffea00\nTffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff🌡️ Temperature: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3BME680Tff7b72:Tff7b72:Te6edf3bmeTb4b4b4.Te6edf3temperatureTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff °CTffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff💧 Humidity: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3BME680Tff7b72:Tff7b72:Te6edf3bmeTb4b4b4.Te6edf3humidityTb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff %Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff⏲️ Pressure: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657floatTb4b4b4)Tb4b4b4(Te6edf3BME680Tff7b72:Tff7b72:Te6edf3bmeTb4b4b4.Te6edf3pressure Tff7b72/ T79c0ff100.0Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff hPaTffea00\nTa5d6ff"Tb4b4b4;
Te6edf3content Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff💨 Gas Resistance: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657floatTb4b4b4)Tb4b4b4(Te6edf3BME680Tff7b72:Tff7b72:Te6edf3bmeTb4b4b4.Te6edf3gas_resistance Tff7b72/ T79c0ff1000.0Tb4b4b4)Tb4b4b4) Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff KOhmsTffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72else Tb4b4b4{
Te6edf3content Tff7b72= Ta5d6ff"Ta5d6ffPATH NOT FOUNDTffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Te6edf3packerTb4b4b4.Te6edf3packBinaryTb4b4b4(Te6edf3contentTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3contentTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTb4b4b4(Te6edf3packerTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3packerTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Served by rngit 1.5.2 - Generated in 0.05s